/**
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * $Id$ Usuario.java
 * Universidad de los Andes (Bogotá - Colombia)
 * Departamento de Ingeniería de Sistemas y Computación
 * Licenciado bajo el esquema Academic Free License version 2.1
 *
 * Ejercicio: Muebles los Alpes
 * Autor: Camilo Alvarez
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 */
package com.losalpes.catalogo.entities;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
 * Clase que modela un usuario dentro del sistema.
 * @author Camilo Alvarez
 */
@Entity
@Table(name = "Usuario")
@NamedQueries({
    @NamedQuery(name = "Usuario.findAll", query = "SELECT u FROM Usuario u")
})
public class Usuario implements Serializable {

    private static final long serialVersionUID = 1L;

    // -----------------------------------------------------
    // Atributos
    // -----------------------------------------------------

    /**
     * Login del usuario.
     */
    @Id
    @Column(name = "documento")
    private String documento;

    @Basic(optional = false)
    @Column(name = "usuario", nullable=false)
    private String usuario;
    /**
     * Contraseña del usuario.
     */
    @Basic(optional = false)
    @Column(name = "pwd", nullable=false)
    private String pwd;

    @Basic(optional = false)
    @Column(name = "tipoDocumento", nullable=false)
    private TipoDocumento tipoDocumento;

    @Basic(optional = false)
    @Column(name = "nombreCompleto", nullable=false)
    private String nombreCompleto;

    @Basic(optional = false)
    @Column(name = "telefonoResidencia", nullable=false)
    private String telefonoResidencia;

    @Basic(optional = true)
    @Column(name = "telefonoCelular")
    private String telefonoCelular;

    @Basic(optional = false)
    @Column(name = "direccion", nullable=false)
    private String direccion;

    @Basic(optional = false)
    @Column(name = "ciudadResidencia", nullable=false)
    private String ciudadResidencia;

    @Basic(optional = false)
    @Column(name = "departamento", nullable=false)
    private String departamento;

    @Basic(optional = false)
    @Column(name = "pais", nullable=false)
    private String pais;

    @Basic(optional = true)
    @Column(name = "profesion")
    private String profesion;

    @Basic(optional = false)
    @Column(name = "email", nullable=false)
    private String email;


    /**
     * Tipo de usuario.
     */
    private TipoUsuario tipoUsuario;

    public String getUsuario() {
        return usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    public String getCiudadResidencia() {
        return ciudadResidencia;
    }

    public void setCiudadResidencia(String ciudadResidencia) {
        this.ciudadResidencia = ciudadResidencia;
    }

    public String getDepartamento() {
        return departamento;
    }

    public void setDepartamento(String departamento) {
        this.departamento = departamento;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public String getDocumento() {
        return documento;
    }

    public void setDocumento(String documento) {
        this.documento = documento;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getNombreCompleto() {
        return nombreCompleto;
    }

    public void setNombreCompleto(String nombreCompleto) {
        this.nombreCompleto = nombreCompleto;
    }

    public String getPais() {
        return pais;
    }

    public void setPais(String pais) {
        this.pais = pais;
    }

    public String getProfesion() {
        return profesion;
    }

    public void setProfesion(String profesion) {
        this.profesion = profesion;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public String getTelefonoCelular() {
        return telefonoCelular;
    }

    public void setTelefonoCelular(String telefonoCelular) {
        this.telefonoCelular = telefonoCelular;
    }

    public String getTelefonoResidencia() {
        return telefonoResidencia;
    }

    public void setTelefonoResidencia(String telefonoResidencia) {
        this.telefonoResidencia = telefonoResidencia;
    }

    public TipoDocumento getTipoDocumento() {
        return tipoDocumento;
    }

    public void setTipoDocumento(TipoDocumento tipoDocumento) {
        this.tipoDocumento = tipoDocumento;
    }

    public TipoUsuario getTipoUsuario() {
        return tipoUsuario;
    }

    public void setTipoUsuario(TipoUsuario tipoUsuario) {
        this.tipoUsuario = tipoUsuario;
    }

   @Override
    public int hashCode() {
        int hash = 0;
        hash += (usuario != null ? usuario.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Mueble)) {
            return false;
        }
        Usuario other = (Usuario) object;
        if ((this.usuario == null && other.usuario != null) || (this.usuario != null && !this.usuario.equals(other.usuario))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString(){
        return "com.losalpes.catalogo.entities.Usuario[usuario=" + usuario + "]";
    }
}